package top.tagao.multithread_04_sync;

/**
 * @author fu-xiao-liu
 * @Date 2022/3/29 21:42
 * <p>
 * 使用同步方法处理继承Thread类的方式中的线程安全问题
 * 方式二：同步方法。
 * 如果操作共享数据的代码完整的声明在一个方法中，我们不妨将此方法声明同步的。
 * <p>
 * 5.同步的方式，解决了线程的安全问题。---好处
 * 操作同步代码时，只能有一个线程参与，其他线程等待。相当于是一个单线程的过程，效率低。 ---局限性
 */
public class Sync_03_way {
    public static void main(String[] args) {
        WindowThread03 windowThread01 = new WindowThread03();
        WindowThread03 windowThread02 = new WindowThread03();
        WindowThread03 windowThread03 = new WindowThread03();
        windowThread01.start();
        windowThread02.start();
        windowThread03.start();
    }
}

class WindowThread03 extends Thread {
    private static int ticket = 100;
    @Override
    public void run() {
        while (true) {
            show();
        }
    }
    private  static synchronized void show() {//同步监视器：Window4.class
        if (ticket > 0) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "：卖票，票号为：" + ticket);
            ticket--;
        }
    }
}